package com.tony.study.designMode.DM4_原型模式.DM4;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * Created with IntelliJ IDEA.
 *
 * @Title: WorkTypeEnum
 * @Auther: 皮蛋布丁
 * @Date: 2021/11/01/17:10
 * @Description: 作业枚举类
 */
public enum WorkTypeEnum {

    /**
     * 枚举对象
     */
    YUWEN("语文",0),
    SHUXUE("数学",1),
    YINGYU("英语",2),
    WULI("物理",3),
    HUAXUE("化学",4),
    SHENGWU("生物",5);

    private final String name;
    private final Integer value;

    /**
    * @Description: WorkTypeEnum 枚举构造器
    * @Param: [name 作业类型名称, value 作业类型值]
    * @return:
    * @Author: 皮蛋布丁
    * @Date: 2021/11/1 17:12
    */
    WorkTypeEnum(String name, Integer value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    @JsonValue  //序列化是只返回这一个字段的值
    public Integer getValue() {
        return value;
    }

    /**
    * @Description: getEnum 通过name获取对应的枚举对象
    * @Param: [name 枚举名称]
    * @return: com.tony.study.designMode.MD4_原型模式.MD4.WorkTypeEnum
    * @Author: 皮蛋布丁
    * @Date: 2021/11/1 17:18
    */
    @JsonCreator    //指定对象反序列化时的构造函数或者工厂方法(不使用该注解，那么需要提供无参构造函数以及对应的setter方法)
    public static WorkTypeEnum getEnum(String name) {
        for (WorkTypeEnum typeEnum : WorkTypeEnum.values()) {
            if (name.equals(typeEnum.getName())) {
                return typeEnum;
            }
        }
        return null;
    }

    /**
    * @Description: getEnum 通过value获取对应的枚举对象
    * @Param: [value 类型值]
    * @return: com.tony.study.designMode.MD4_原型模式.MD4.WorkTypeEnum
    * @Author: 皮蛋布丁
    * @Date: 2021/11/1 17:20
    */
    @JsonValue
    public static WorkTypeEnum getEnum(Integer value) {
        for (WorkTypeEnum typeEnum : WorkTypeEnum.values()) {
            if (value.equals(typeEnum.getValue())) {
                return typeEnum;
            }
        }
        return null;
    }


}
